package Calculadora.Stack;

import Calculadora.Stack.AbstractStack;
import java.util.Vector;
/**
 * Implementacion de Stack con Vector
 * @param <E>  clase generica
 * @author Douglas Dávila
 * @author Vinicio Gomez
 * @since 12/08/2012
 * @version 1.2
 * @see Stack
 */
public class StackVector<E> extends AbstractStack{
    
    /**Stack implementado por medio de clase Vector*/
    protected Vector<E> data;
      
    /**
     * Constructor 
     * @pre n/a
     * @post instancia un nuevo stack
     * @since 12/08/2012
     */
    public StackVector()
    {
        data = new Vector<E>(10,1);
    }
    
     /**
     * Ingresa un objeto al inicio de la pila
     * @param item objeto a ingresar
     * @pre n/a
     * @post el objeto es agregado
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public void push(Object item) {
        data.add((E)item);
    }
    
    /**
     * Saca el ultimo objeto agregado a la pila
     * @return el ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post el ultimo objeto agregado a la pila es removido de la misma
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public E pop() {
        return data.remove(size()-1);    
    }

     /**
     * Se obtiene la referencia del ultimo objeto agregado a la pila
     * @return la referencia del ultimo objeto agregado a la pila
     * @pre que la pila no este vacia
     * @post se retorna la referencia del ultimo objeto agregado a la pila
     * @since 12/08/2012
     * @see Stack
     */
    @Override
    public E peek() {
       return data.get(size() - 1);
    }
    
    /**
     * Se determina la cantidad de objetos dentro de la pila
     * @return la cantidad de objetos dentro de la pila
     * @pre n/a
     * @post se retorna la cantidad de objetos dentro de la pila
     * @see Stack
     */
    @Override
    public int size() {
        return data.size();
    }

    
}